package Java100_1006;

import Java100_1006.operations.IOperation;

abstract public class User {
    // 使用这个 User 类来表示一个用户
// +----------+-------------+------+-----+---------+----------------+
// | Field    | Type        | Null | Key | Default | Extra          |
// +----------+-------------+------+-----+---------+----------------+
// | userId   | int(11)     | NO   | PRI | NULL    | auto_increment |
// | username | varchar(20) | YES  |     | NULL    |                |
// | password | varchar(20) | YES  |     | NULL    |                |
// | isAdmin  | int(11)     | YES  |     | NULL    |                |
// +----------+-------------+------+-----+---------+----------------+
    // 针对此处的 isAdmin, 并不是直接使用一个 boolean 变量来区分, 而是使用两个不同的子类.
    // 原因是, 管理员和普通用户支持的方法, 是不一样的.
    private int userId;
    private String userName;
    private String passWord;

    // 包含了一个数组, 数组里面就是该用户支持的哪些操作.
    // 针对普通用户, 和管理员, 分别设置不同的操作.
    IOperation[] operations;

    //普通用户和管理员看到的菜单也不同
    abstract public int menu();
    public void doOperation(int choice) {
        operations[choice].work();
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                '}';
    }
}
